home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / tools / ask / ksd / source / exfunc.c < prev    next >
Text File  |  1997-05-31  |  2KB  |  121 lines

  1. /* KSDサポート関数利用サンプルプログラム */
  2. /* 外部起動プログラム */
  3. /* 特殊な関数は使っていないので、再コンパイル可能です */
  4.  
  5. #include <stdio.h>
  6. #include <doslib.h>
  7. #include <iocslib.h>
  8. #include <class.h>
  9. #include "ksd.h"
  10.  
  11. #define    SKclr        0x3f00
  12. #define BIT0        0x0001
  13. #define BIT1        0x0002
  14.  
  15. int    ExtFunc1()
  16. {
  17. union {
  18.     ULONG md;
  19.     UBYTE s[sizeof(ULONG)+1];
  20. } ss;
  21. int a;
  22.     printf("KSD状態1\n");
  23.     ss.md=KSDReadMode();
  24.     ss.s[sizeof(long)]=0; // EOS
  25.              printf("\tStatus : %c%c\n",a>>8,a&0xff);
  26.     a=KSDReadVer();  printf("\tVersion: %d.%d\n",a>>8,a&0xff);
  27. }
  28.  
  29. int    ExtFunc2()
  30. {
  31. long a;
  32.     printf("KSD状態2\n");
  33.     a=KSDReadSize(); printf("\tKBsize : %d\n",a);
  34.     a=KSDReadFree(); printf("\tKBfree : %d\n",a);
  35.     a=KSDRcheck();     printf("\tRcheck : %c\n",a);
  36. }
  37.  
  38. UBYTE hex1(UBYTE d)
  39. // d=$0~$f
  40. {
  41.     return(d<10? '0'+d:'A'+d-10);
  42. }
  43.  
  44. UBYTE *ctohex(UBYTE *tmp,UBYTE c)
  45. // c -> hex
  46. {
  47.     *tmp++=hex1(c>>4);    // 上位4ビット
  48.     *tmp++=hex1(c&0x0f);    // 下位4ビット
  49.     //*tmp++=' '; // セパレーター
  50.     return(tmp);
  51. }
  52.  
  53. void main()
  54. {
  55. int c;
  56. UBYTE tmp[10];
  57. KSD_EF ef1,ef2;
  58.     if (!KSDSetAPI()) {
  59.         printf("KSDが組み込まれていません\n");
  60.         exit(3);
  61.     }
  62.     // 外部起動プログラム登録
  63.     ef1.Scan=SKclr>>8;
  64.     ef1.Shift=BIT1; // Ctrl
  65.     ef1.Exec=ExtFunc1;
  66.     ef1.Next=(KSD_EF *)0;
  67.     if (KSDLinkEFunc(&ef1)) {
  68.         printf("登録出来ません1\n");
  69.         exit(4);
  70.     }
  71.     ef2.Scan=SKclr>>8;
  72.     ef2.Shift=BIT0; // shift
  73.     ef2.Exec=ExtFunc2;
  74.     ef2.Next=(KSD_EF *)0;
  75.     if (KSDLinkEFunc(&ef2)) {
  76.         printf("登録出来ません2\n");
  77.         exit(5);
  78.     }
  79.     if (KSDLinkEFunc(&ef1)) {
  80.         // エラーテスト
  81.         printf("登録出来ません1(再度:無視)\n");
  82.     }
  83.     /* アクセサリを試す */
  84.     PRINT("K_KEYINP / 終了:CTRL-Z\r\n");
  85.     PRINT("SHIFT-CLR/CTRL-CLR\r\n");
  86.     while (1) {
  87.         c=K_KEYINP();
  88.         if (c==0x1a) break;
  89.         if (c<' ') {
  90.             if (c==0x0d) {
  91.                 PUTCHAR('\r');
  92.                 PUTCHAR('\n');
  93.             } else {
  94.                 // コントロールコードは16進表示で
  95.                 ctohex(tmp,c);
  96.                 PRINT(tmp);
  97.             }
  98.         } else    PUTCHAR(c);
  99.     }
  100.     PRINT("B_KEYINP / 終了:CTRL-Z\r\n");
  101.     PRINT("SHIFT-CLR/CTRL-CLR\r\n");
  102.     while (1) {
  103.         c=B_KEYINP()&0xff;
  104.         if (c==0x1a) break;
  105.         if (c<' ') {
  106.             if (c==0x0d) {
  107.                 PUTCHAR('\r');
  108.                 PUTCHAR('\n');
  109.             } else {
  110.                 // コントロールコードは16進表示で
  111.                 ctohex(tmp,c);
  112.                 PRINT(tmp);
  113.             }
  114.         } else    PUTCHAR(c);
  115.     }
  116.     // 外部起動プログラム解除
  117.     KSDUnlinkEFunc(&ef1);
  118.     KSDUnlinkEFunc(&ef2);
  119.     EXIT2(0);
  120. }
  121.